package com.ruoyi.type.service.impl;

import java.util.LinkedList;
import java.util.List;
import java.util.Objects;


import com.ruoyi.type.mapper.TypeMapper;
import com.ruoyi.type.service.ITypeService;
import com.ruoyi.vo.TypeWithStrategyVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.type.domain.Type;

/**
 * 类型表Service业务层处理
 *
 * @author ruoyi
 * @date 2025-01-09
 */
@Service
public class TypeServiceImpl implements ITypeService
{
    @Autowired
    private TypeMapper typeMapper;

    /**
     * 查询类型表
     *
     * @param id 类型表主键
     * @return 类型表
     */
    @Override
    public Type selectTypeById(Integer id)
    {
        return typeMapper.selectTypeById(id);
    }

    /**
     * 查询类型表列表
     *
     * @param type 类型表
     * @return 类型表
     */
    @Override
    public List<TypeWithStrategyVo> selectTypeList(Type type)
    {
        //将 List<Type> 转换为 List<>
        List<TypeWithStrategyVo> twsVo = new LinkedList<>();
        List<Type> types = typeMapper.selectTypeList(type);
        for (Type t : types) {
            twsVo.add( new TypeWithStrategyVo(typeMapper.selectStrategyByTypeId(t.getId()) ,t));
        }
        return twsVo;
    }

    /**
     * 新增类型表
     *
     * @param type 类型表
     * @return 结果
     */
    @Override
    public int insertType(Type type)
    {
        Type t = typeMapper.selectTypeByName(type.getName());//根据name获取到type
        if(!Objects.isNull(t) && t.getIsDeleted()==1){ //已经添加过该type
            return -1;
        } else if (!Objects.isNull(t) && t.getIsDeleted()==0) {//以前添加过该type，但是取消了，现在is_deleted == 0
            //现在将原来的type，被插入的type覆盖，并且将is_deleted == 1
            t.setIsDeleted(1);
            t.setName(type.getName());
            t.setInfo(type.getInfo());
            return 1;
        }
        return typeMapper.insertType(type);
    }

    /**
     * 修改类型表
     *
     * @param type 类型表
     * @return 结果
     */
    @Override
    public int updateType(Type type)
    {
        return typeMapper.updateType(type);
    }

    /**
     * 批量删除类型表
     *
     * @param ids 需要删除的类型表主键
     * @return 结果
     */
    @Override
    public int deleteTypeByIds(Integer[] ids)
    {
        return typeMapper.deleteTypeByIds(ids);
    }

    /**
     * 删除类型表信息
     *
     * @param id 类型表主键
     * @return 结果
     */
    @Override
    public int deleteTypeById(Integer id)
    {
        return typeMapper.deleteTypeById(id);
    }
}
